home *** CD-ROM | disk | FTP | other *** search
/ Mission 3 / Mission 3.zip / Mission 3.iso / demovers / scripter / demo / filefind.sic < prev    next >
Text File  |  1998-09-26  |  2KB  |  74 lines

  1. //ACE-SICPAR 8 0072 
  2. /*
  3.  * Dieser Script sucht alle *.bak in allen übergebenen Laufwerken und
  4.  * Ordnern und gibt die Namen im Fenster aus.
  5.  */
  6. const   IS_FOLDER = 16;
  7.  
  8. proc main(...)
  9. {
  10.     /*
  11.      * Falls Pfade an das Skript übergeben wurden, werden diese benutzt,
  12.      * ansonsten kann ein Pfad in einem Fileselektor eingegeben werden.
  13.      */
  14.     if (argc) {
  15.         i = 0;
  16.         while (i < argc) {
  17.             folder_list[argv[i++]] = 1;
  18.         }
  19.     }
  20.     else {
  21.         if (fsel(name, "Suchpfad bestimmen", "*.*"))
  22.             folder_list[path(name)] = 1;
  23.         else
  24.             exit(1);
  25.     }
  26.  
  27.     /*
  28.      * Jetzt muß eine Suchmaske eingegeben werden. Dafault ist *.bak
  29.      */
  30.     eingabe = dialog.input("[FileFind] Suchmaske:", "*.bak");
  31.     mask = eingabe[1];
  32.     if (errno) exit(1);
  33.  
  34.     /*
  35.      * In dieser Schleife werden alle Verzeichnisse rekursiv durchlaufen.
  36.      * Alle Verzeichnisse stehen in einem assoziativen Array, wobei die
  37.      * Namen der Verzeichnisse als Index benutzt werden und die noch nicht
  38.      * bearbeiteten Verzeichnisse als Eintrag eine 1 haben und die schon
  39.      * bearbeiteten eine 0.
  40.      */
  41.     do {
  42.         new_entries = 0;
  43.         with (folder in folder_list) {
  44.             if (folder_list[folder] == 1) {
  45.                 printf("\r%s...\033K", folder);
  46.                 /*
  47.                  * Hier wird ein Unterverzeichnis eingelesen
  48.                  */
  49.                 if (filelist(files, folder)) {
  50.                     ++new_entries;
  51.                     for (i = 0; i < files.length; ++i) {
  52.                         name = files[i, 0];
  53.                         /*
  54.                          * Unterverzeichnisse werden in das
  55.                          * assoziative Array eingetragen und
  56.                          * Dateien mit der Maske verglichen
  57.                          */
  58.                         if (files[i, 3] & IS_FOLDER) {
  59.                             name = folder + name + "\\";
  60.                             folder_list[name] = 1;
  61.                         }
  62.                         else {
  63.                             if (imatch(name, mask))
  64.                                 print("\r-> ", folder, name);
  65.                         }
  66.                     }
  67.                 }
  68.                 folder_list[folder] = 0;
  69.             }
  70.         }
  71.  
  72.     } while (new_entries > 0);
  73. }
  74.